import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import CategoricalNB

# 读取数据集
data = {
    '年龄': ['≤30', '≤30', '31~40', '>40', '>40', '>40', '31~40', '≤30', '≤30', '>40', '≤30', '31~40', '31~40', '>40', '≤30'],
    '收入': ['高', '高', '高', '中', '低', '低', '低', '中', '低', '中', '中', '中', '高', '中', '中'],
    '是否为学生': ['否', '否', '否', '否', '是', '是', '是', '否', '是', '是', '是', '否', '是', '否', '是'],
    '信誉': ['中', '优', '中', '中', '中', '优', '优', '中', '中', '中', '优', '优', '中', '优', '中'],
    '是否购买计算机': ['否', '否', '是', '是', '是', '否', '是', '否', '是', '是', '是', '是', '是', '否', '是']
}
df = pd.DataFrame(data)

# 将类别变量进行编码
age_categories = ['≤30', '31~40', '>40']
income_categories = ['高', '中', '低']
student_categories = ['否', '是']
credit_categories = ['中', '优']
df['年龄'] = df['年龄'].astype('category').cat.set_categories(age_categories).cat.codes
df['收入'] = df['收入'].astype('category').cat.set_categories(income_categories).cat.codes
df['是否为学生'] = df['是否为学生'].astype('category').cat.set_categories(student_categories).cat.codes
df['信誉'] = df['信誉'].astype('category').cat.set_categories(credit_categories).cat.codes
df['是否购买计算机'] = df['是否购买计算机'].astype('category').cat.set_categories(['否', '是']).cat.codes

# 划分训练集和测试集
X = df[['年龄', '收入', '是否为学生', '信誉']]
y = df['是否购买计算机']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建朴素贝叶斯分类器
clf = CategoricalNB()

# 训练分类器
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 评估分类器性能
# 这里可以根据实际需求添加性能评估指标的计算
print("预测结果：", y_pred)